/*
 * Copyright (C) 2009 2DAI
 *
 * Este programa es Software Libre; usted puede redistribuirlo
 * y/o modificarlo bajo los términos de la "GNU General Public
 * License" como lo publica la "FSF Free Software Foundation",
 * o (a su elección) de cualquier versión posterior.
 *
 * Este programa es distribuido con la esperanza de que le será
 * útil, pero SIN NINGUNA GARANTIA; incluso sin la garantía
 * implícita por el MERCADEO o EJERCICIO DE ALGUN PROPOSITO en
 * particular. Vea la "GNU General Public License" para más
 * detalles.
 *
 * Usted debe haber recibido una copia de la "GNU General Public
 * License" junto con este programa, si no, escriba a la "FSF
 * Free Software Foundation, Inc.", 59 Temple Place - Suite 330,
 * Boston, MA  02111-1307, USA.
 */
package logic;

import data.DataManager;
import java.util.ArrayList;
import on.StandingsTeam;
import on.EventsCalendar;
import on.SingleRanking;

/**
 *
 * Author: Jorge Garrido Oval
 * Colaborated; José Iván Palmer García
 * Esta clase se utiliza para rellenar el contenido de las tablas.
 */
public class TableContent {

    private Object[][] datos;
    private int numCol;
    private DataManager dm;

    //Constructores
    /**
     * Constructor por defecto, no inicializa ningúna variable
     */
    public TableContent() {
    }

    /**
     * Constructor parametrizado, inicializa las variables y selecciona la fuente
     * de datos.
     * @param dm
     * @param num
     * @param opciones
     */
    public TableContent(DataManager dm, int num, int opciones) {
        this.dm = dm;
        this.numCol = num;
        this.seleccionaDatos(opciones);
    }

    /**
     * Este método nos seleccionará los datos.
     * @param opcion
     */
    private void seleccionaDatos(int opcion) {
        switch (opcion) {
            case 0:
                standings();
                break;
            case 1:
                calendary();
                break;
            case 2:
                ranking();
                break;
        }
    }

    //Métodos
    /**
     * Rellena el array de objetos con los registros de tipo StandingsTeam
     */
    private void standings() {
        ArrayList<StandingsTeam> lista = dm.getList();
        datos = new Object[lista.size()][numCol];
        for (int cont = 0; cont < lista.size(); cont++) {
            for (int cont2 = 0; cont2 < numCol; cont2++) {
                switch (cont2) {
                    case 0:
                        datos[cont][cont2] = lista.get(cont).getEquipo();
                        break;
                    case 1:
                        datos[cont][cont2] = lista.get(cont).getEcuentrosJugados();
                        break;
                    case 2:
                        datos[cont][cont2] = lista.get(cont).getEncuentrosGanados();
                        break;
                    case 3:
                        datos[cont][cont2] = lista.get(cont).getEncuentrosPerdidos();
                        break;
                    case 4:
                        datos[cont][cont2] = lista.get(cont).getPartidasFavor();
                        break;
                    case 5:
                        datos[cont][cont2] = lista.get(cont).getPartidasContra();
                        break;
                    case 6:
                        datos[cont][cont2] = lista.get(cont).getPuntos();
                        break;
                    default:
                        datos[cont][cont2] = "0";
                }
            }
        }
    }

    /**
     * Rellena el array de objetos con los registros de tipo SingleRanking
     */
    private void ranking() {
        ArrayList<SingleRanking> lista = dm.getList();
        datos = new Object[lista.size()][numCol];
        for (int cont = 0; cont < lista.size(); cont++) {
            for (int cont2 = 0; cont2 < numCol; cont2++) {
                switch (cont2) {
                    //PALMEEER RELLENA AQUÍ!! xD
                    case 0:
                        this.datos[cont][cont2] = lista.get(cont).getJugador();
                        break;
                    case 1:
                        this.datos[cont][cont2] = lista.get(cont).getPosicion();
                        break;
                    case 2:
                        this.datos[cont][cont2] = lista.get(cont).getPosicionAnterior();
                        break;
                    case 3:
                        this.datos[cont][cont2] = lista.get(cont).getPuntosInicioMes();
                        break;
                    case 4:
                        this.datos[cont][cont2] = lista.get(cont).getPuntosJornada();
                        break;
                    case 5:
                        this.datos[cont][cont2] = lista.get(cont).getPuntosFinalMes();
                        break;
                    case 6:
                        this.datos[cont][cont2] = lista.get(cont).getPartidosJugadosMes();
                        break;
                    case 7:
                        this.datos[cont][cont2] = lista.get(cont).getPartidosGanadosMes();
                        break;
                    case 8:
                        this.datos[cont][cont2] = lista.get(cont).getPartidosPerdidosMes();
                        break;
                    default:
                        datos[cont][cont2] = "0";
                }
            }
        }
    }

    /**
     * Rellena el array de objetos con los registros de tipo EventsCalendar
     */
    private void calendary() {
        ArrayList<EventsCalendar> lista = dm.getList();
        datos = new Object[lista.size()][numCol];
        for (int cont = 0; cont < lista.size(); cont++) {
            for (int cont2 = 0; cont2 < numCol; cont2++) {
                switch (cont2) {
                    //PALMEEER RELLENA AQUÍ!! xD
                    case 0:
                        this.datos[cont][cont2] = lista.get(cont).getEquipoLocal();
                        break;
                    case 1:
                        this.datos[cont][cont2] = lista.get(cont).getEquipoVisitante();
                        break;
                    case 2:
                        this.datos[cont][cont2] = lista.get(cont).getCategoria();
                        break;
                    case 3:
                        this.datos[cont][cont2] = lista.get(cont).getDiaHora();
                        break;
                    case 4:
                        this.datos[cont][cont2] = lista.get(cont).getArbitro();
                        break;
                    default:
                        datos[cont][cont2] = "0";
                }
            }
        }
    }

    /**
     * Retorna el array bidimensional de objetos
     * @return the datos
     */
    public Object[][] getDatos() {
        return datos;
    }
}
